/*
 * ManejadorDeCubo.cpp
 *
 *  Created on: 22/10/2012
 *      Author: emmanuel
 */

#include "ManejadorDeCubo.h"


ManejadorDeCubo::ManejadorDeCubo (std::string path){
	this->path = path;
	this->manejo_bloques = new ManejoDeBloques(TAM_CUBO, path);
	this->manejo_bloques->crear_arch_vacio();
}

int ManejadorDeCubo::get_cantidad_cubos(){
	return this->manejo_bloques->get_tam_arch_bloques() / TAM_CUBO;
}

Cubo*  ManejadorDeCubo::obtener_cubo(int idCubo){
	char buffer[TAM_CUBO];

	for (int i = 0 ; i < TAM_CUBO ; ++i){
		buffer[i] = char(0);
	}


	unsigned int offset = 0;
	this->manejo_bloques->recuperar_bloque(buffer,idCubo);
	std::stringstream ss;
	ss << buffer;
	string cadena = ss.str();

	if (cadena.length() > 0){
		Cubo* cubo = new Cubo();
		cubo->deserializar(buffer,offset);
		return cubo;
	}

	return NULL;
}

int ManejadorDeCubo::get_tamanio_archivo(){
	return this->manejo_bloques->get_tam_arch_bloques();
}

int ManejadorDeCubo::get_id_proximo_cubo(){
	return this->manejo_bloques->get_num_prox_bloque();
}

void ManejadorDeCubo::actualizar_cubo(Cubo cubo, int idCubo){

	char buffer[TAM_CUBO];
	for (int i = 0 ; i < TAM_CUBO ; ++i){
		buffer[i] =char(0);
	}
	unsigned int offset = 0;
	cubo.serializar(buffer,offset);
	this->manejo_bloques->guardar_bloque(buffer,idCubo);

}



ManejadorDeCubo::~ManejadorDeCubo(){
	delete this->manejo_bloques;
}
